The use of software frameworks to develop applications for particular environments can improve software quality and reduce development effort. In general, a software framework consists of reusable, common code that provides generic functionality for the environment and well-defined application programming interfaces (APIs). In this way, a software framework improves software modularity by encapsulating implementation details of the common code behind APIs.
Many software frameworks employ self-contained instances of abstract data types, or “components,” that provide off-the-shelf functionality to applications being developed within the software frameworks. A component is thus a “black box” that defines a cohesive set of operations behind an API. Components may be reused and adapted by developers to create new applications without having to understand the internal structure and operations of the component. Examples of commercially available software frameworks include Cocoa®, available from Apple, Inc., the .NET application framework and Microsoft Foundation Classes (MFC) available from Microsoft Corp., and Common Object Request Broker Architecture (CORBA) available from Object Management Group. Component examples include Cocoa® components, ASP.NET controls, ActiveX or VBX controls.